//
//  Overload_typecast.hpp
//  learnC++
//
//  Created by liuzhibing on 2018/6/6.
//  Copyright © 2018年 yunfan.com. All rights reserved.
//

#ifndef Overload_typecast_hpp
#define Overload_typecast_hpp

#include <stdio.h>
#include <iostream>

class CentsFour {
private:
    int m_cents;
    
public:
    CentsFour(int value = 0);
//    返回类型是int，函数名也是int，就是说不写成 int operator int() const { return value; }，返回类型被省去了。
    //将一个类型转换为另一个类型
    operator int() {return m_cents;}//重载强制类型转换操作符 将CentsFour转为m_cents
    
    void printInt(int value);
    
};

class Dollars
{
private:
    int m_dollars;
public:
    Dollars(int dollars=0)
    {
        m_dollars = dollars;
    }
    
    //将一个类型转换为另一个类型
    // Allow us to convert Dollars into Cents
    operator CentsFour() { return CentsFour(m_dollars * 100); }
    
    //将一个类型转换为int类型
    operator int(){
        return m_dollars;
    }
};

void printCents(CentsFour cents);
//http://www.learncpp.com/cpp-tutorial/910-overloading-typecasts/

/*
 
 CentsFour cent(7);
 
 编译器会首先注意到printInt函数需要一个整数参数。 然后它会注意到cent不是一个整数。 最后，它会查看我们是否提供了将Cents转换为int的方法。 因为我们有，它会调用我们的操作符int（）函数，它返回一个int，返回的int将被传递给printInt（）。
 
 cent.printInt(cent);
 int c = static_cast<int>(cents);
 
 
 
 Dollars dollars(9);
 printCents(dollars);
 */

#endif /* Overload_typecast_hpp */
